<html>
<head><meta charset="utf-8"><title>subset errors rework · t-compiler/wg-polonius · Zulip Chat Archive</title></head>
<h2>Stream: <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/index.html">t-compiler/wg-polonius</a></h2>
<h3>Topic: <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html">subset errors rework</a></h3>

<hr>

<base href="https://rust-lang.zulipchat.com">

<head><link href="https://rust-lang.github.io/zulip_archive/style.css" rel="stylesheet"></head>

<a name="205894123"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205894123" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205894123">(Aug 04 2020 at 11:08)</a>:</h4>
<p>I'm working on pushing my prototypes computing subset errors:</p>
<ul>
<li>first, computing them in the location-insensitive variant, which should show that here placeholder loans map a bit better (as there's no need for a dedicated relation to maintain subsets of placeholder origins)</li>
<li>then, adding them to the Opt variant, with the subset-based rules, as placeholder loans don't work here</li>
<li>finally, switching the Naive variant from placeholder loans to subset-based rules and updating the rules in the hackmd if you're all happy with them</li>
</ul>



<a name="205906002"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205906002" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205906002">(Aug 04 2020 at 13:29)</a>:</h4>
<p>this is great!</p>



<a name="205906205"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205906205" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205906205">(Aug 04 2020 at 13:31)</a>:</h4>
<p>I'm close to finishing the 1st part (adding tests as we speak, which reminds me that we'd also need some more testing, refactoring tests, etc :)</p>



<a name="205908115"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205908115" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205908115">(Aug 04 2020 at 13:49)</a>:</h4>
<p>alright here are the location-insensitive subset errors <a href="https://github.com/lqd/borrow-check/tree/subset_errors_are_back_with_a_vengeance">https://github.com/lqd/borrow-check/tree/subset_errors_are_back_with_a_vengeance</a></p>



<a name="205908528"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205908528" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205908528">(Aug 04 2020 at 13:52)</a>:</h4>
<p>(I'll run rustc tests now, but wanted to publish it so you could take a look; there's a kind of hack I disliked but is no big deal: as we can call the location insensitive variant directly, and that normal subset errors are keyed by their location, when debugging I put them at the 0 point)</p>



<a name="205908592"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205908592" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205908592">(Aug 04 2020 at 13:53)</a>:</h4>
<p>I like that it shows the placeholder loans neatness :) we add the contained loans, and just remove the locations from the rules</p>



<a name="205908851"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205908851" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205908851">(Aug 04 2020 at 13:54)</a>:</h4>
<p>(in the naive variant, there are too many subsets we don't need to also push subset error computations down to the <code>requires</code> relation, while we don't maintain transitive subsets in the location-insensitive pass; also in the Naive variant placeholder loans come into conflict with our lack of coolness about things that are true at all points of the cfg)</p>



<a name="205910175"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205910175" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205910175">(Aug 04 2020 at 14:04)</a>:</h4>
<p>let me take a look</p>



<a name="205910340"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205910340" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205910340">(Aug 04 2020 at 14:05)</a>:</h4>
<p>it's very simple</p>



<a name="205911417"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205911417" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205911417">(Aug 04 2020 at 14:13)</a>:</h4>
<p>so</p>



<a name="205911468"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205911468" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205911468">(Aug 04 2020 at 14:14)</a>:</h4>
<p>this is still using the placeholder loan approach, right?</p>



<a name="205911477"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205911477" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205911477">(Aug 04 2020 at 14:14)</a>:</h4>
<p>(just to make sure I understand what I'm reading)</p>



<a name="205911590"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205911590" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205911590">(Aug 04 2020 at 14:15)</a>:</h4>
<p>I don't see any edits to the "naive" code, right?</p>



<a name="205911633"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205911633" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205911633">(Aug 04 2020 at 14:15)</a>:</h4>
<p>I guess that it just kind of "falls out" because we're already saying 'only propagate those loans that might be involved in an error'?</p>



<a name="205911822"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205911822" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205911822">(Aug 04 2020 at 14:16)</a>:</h4>
<p><span class="user-mention silent" data-user-id="116113">lqd</span> <a href="#narrow/stream/186049-t-compiler.2Fwg-polonius/topic/subset.20errors.20rework/near/205908592">said</a>:</p>
<blockquote>
<p>I like that it shows the placeholder loans neatness :) we add the contained loans, and just remove the locations from the rules</p>
</blockquote>
<p>to be clear, if you think placeholder loans work out nicer than the subset approach, I'm happy for us to keep using them :)</p>



<a name="205911876"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205911876" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205911876">(Aug 04 2020 at 14:17)</a>:</h4>
<p>yes this is only part 1 of 3 of the list above, adding them to the location insensitive variant</p>



<a name="205911912"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205911912" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205911912">(Aug 04 2020 at 14:17)</a>:</h4>
<p>using placeholder loans for now, but we can still change it later :)</p>



<a name="205911983"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205911983" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205911983">(Aug 04 2020 at 14:17)</a>:</h4>
<p>which we can decide once more of the work is done on the opt and naive variant</p>



<a name="205912110"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205912110" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205912110">(Aug 04 2020 at 14:18)</a>:</h4>
<p>yeah</p>



<a name="205912114"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205912114" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205912114">(Aug 04 2020 at 14:18)</a>:</h4>
<p>I see the appeal</p>



<a name="205912164"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205912164" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205912164">(Aug 04 2020 at 14:18)</a>:</h4>
<p>in particular I can imagine that it might be helpful because all the errors are then based on "loan propagation" only</p>



<a name="205912174"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205912174" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205912174">(Aug 04 2020 at 14:18)</a>:</h4>
<p>specifically as of course it's a kind of duplication; maybe performance can be a deciding factor but it's currently hard to tell</p>



<a name="205912210"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205912210" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205912210">(Aug 04 2020 at 14:19)</a>:</h4>
<p>yeah</p>



<a name="205912237"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205912237" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205912237">(Aug 04 2020 at 14:19)</a>:</h4>
<p>I guess I think we should look to what makes the rules "feel" most elegant</p>



<a name="205912277"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205912277" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205912277">(Aug 04 2020 at 14:19)</a>:</h4>
<p>because I suspect we may have to do horrible things to them in the name of performance anyway ;)</p>



<a name="205912287"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205912287" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205912287">(Aug 04 2020 at 14:19)</a>:</h4>
<p>yeah :D</p>



<a name="205935878"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205935878" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205935878">(Aug 04 2020 at 17:33)</a>:</h4>
<p>alright, part 2/3 is here with the last 5 commits of <a href="https://github.com/lqd/borrow-check/commits/subset_errors_are_back_with_a_vengeance">https://github.com/lqd/borrow-check/commits/subset_errors_are_back_with_a_vengeance</a></p>



<a name="205935977"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205935977" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205935977">(Aug 04 2020 at 17:34)</a>:</h4>
<p>this adds the subset errors computation to the Opt variant, and would also show what it'd take to switch the Naive variant to using the subset-based rules</p>



<a name="205936045"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205936045" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205936045">(Aug 04 2020 at 17:35)</a>:</h4>
<p>I definitely need to run rustc's tests of course but they should pass</p>



<a name="205936102"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205936102" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205936102">(Aug 04 2020 at 17:35)</a>:</h4>
<p>and with that the <code>Hybrid</code> variant works again, so ♪ the opts are back in toooo-wn ♫</p>



<a name="205950119"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205950119" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205950119">(Aug 04 2020 at 19:34)</a>:</h4>
<p>no apparent new failures on rustc's tests</p>



<a name="205950442"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205950442" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205950442">(Aug 04 2020 at 19:37)</a>:</h4>
<p>the test run seemed faster as well, but it's still heavily dominated by move errors</p>



<a name="205963047"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205963047" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205963047">(Aug 04 2020 at 21:27)</a>:</h4>
<p>and finally, part 3/3 if we decide it's cool, using subset-based rules in the naive variant <a href="https://github.com/lqd/borrow-check/commit/33a554ad8a6cead1a132ddb3dd747911247f3690">https://github.com/lqd/borrow-check/commit/33a554ad8a6cead1a132ddb3dd747911247f3690</a> -- not particularly earth-shattering</p>



<a name="205965331"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205965331" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205965331">(Aug 04 2020 at 21:49)</a>:</h4>
<p>(all in all it's cool that the location-insensitive variant can now be used again, but I do recall computing potential loan and subset errors on the condensation graph manually was like 20x on clap — that is, in absolute values, from 20ms to 1ms)</p>



<a name="205971845"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/205971845" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#205971845">(Aug 04 2020 at 23:07)</a>:</h4>
<p>I forgot I could disable move errors to have an idea of the Hybrid variant duration on tests, looks like 10% if I remove the &lt;10 current failures and tests behaving weirdly and that we have to analyze and fix (could be fact generation, or some of the computations I'm not sure)</p>



<a name="206003574"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206003574" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206003574">(Aug 05 2020 at 09:31)</a>:</h4>
<p>for this I'll open PRs for the two branches above if you all like the changes</p>



<a name="206022783"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206022783" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206022783">(Aug 05 2020 at 13:39)</a>:</h4>
<p><span class="user-mention" data-user-id="116113">@lqd</span> let me take a look..</p>



<a name="206022892"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206022892" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206022892">(Aug 05 2020 at 13:40)</a>:</h4>
<p>sweet thank you, it’s not urgent or anything</p>



<a name="206023833"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206023833" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206023833">(Aug 05 2020 at 13:49)</a>:</h4>
<p>I just wanted to check if polonius' profiling regions would show up inside rustc's profiling regions, they do, the top row is rustc <a href="/user_uploads/4715/7TS1ITZCHYsmXJuxa-K1aI7V/image.png">image.png</a></p>
<div class="message_inline_image"><a href="/user_uploads/4715/7TS1ITZCHYsmXJuxa-K1aI7V/image.png" title="image.png"><img src="/user_uploads/4715/7TS1ITZCHYsmXJuxa-K1aI7V/image.png"></a></div>



<a name="206024052"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206024052" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206024052">(Aug 05 2020 at 13:51)</a>:</h4>
<p>(that being said, nagisa has made a tracy subscriber for <code>tracing</code>, and oli has/is in the process of making rustc use <code>tracing</code> instead of <code>log</code>)</p>



<a name="206026060"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206026060" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206026060">(Aug 05 2020 at 14:08)</a>:</h4>
<p><span class="user-mention" data-user-id="116113">@lqd</span> looking at the naive rules first</p>



<a name="206026075"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206026075" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206026075">(Aug 05 2020 at 14:08)</a>:</h4>
<p>it feels like they could get <em>more</em> naive</p>



<a name="206026086"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206026086" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206026086">(Aug 05 2020 at 14:08)</a>:</h4>
<p>but maybe you structured it this way because of efficiency</p>



<a name="206026088"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206026088" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206026088">(Aug 05 2020 at 14:08)</a>:</h4>
<p>or maybe I'm missing something</p>



<a name="206026098"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206026098" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206026098">(Aug 05 2020 at 14:08)</a>:</h4>
<p>i.e., you have</p>



<a name="206026100"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206026100" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206026100">(Aug 05 2020 at 14:08)</a>:</h4>
<div class="codehilite"><pre><span></span><code>subset_placeholder(O1, O2, N) :-
    subset(O1, O2, N),
    placeholder_region(O1).
</code></pre></div>


<p>and the transitive rule for that</p>



<a name="206026224"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206026224" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206026224">(Aug 05 2020 at 14:09)</a>:</h4>
<p>but presumably we could just say that </p>
<div class="codehilite"><pre><span></span><code>subset_errors(O1, O2, N) :-
    subset(O1, O2, N),
    placeholder_region(O1),
    placeholder_region(O2),
    !known_subset(O1, O2)
</code></pre></div>



<a name="206026226"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206026226" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206026226">(Aug 05 2020 at 14:09)</a>:</h4>
<p>right?</p>



<a name="206026281"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206026281" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206026281">(Aug 05 2020 at 14:10)</a>:</h4>
<p>i.e., we don't really <em>need</em> the <code>subset_placeholder</code> rule</p>



<a name="206026317"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206026317" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206026317">(Aug 05 2020 at 14:10)</a>:</h4>
<p>I think it was indeed one of the options we talked about but you came up with it in the post I think</p>



<a name="206026360"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206026360" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206026360">(Aug 05 2020 at 14:11)</a>:</h4>
<p>that it was indeed for efficiency and the way to not be impacted by the heavy subset filtering in the Opt variant</p>



<a name="206026365"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206026365" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206026365">(Aug 05 2020 at 14:11)</a>:</h4>
<p>the opt rules are a bit more complex</p>



<a name="206026401"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206026401" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206026401">(Aug 05 2020 at 14:11)</a>:</h4>
<p>yeah, ok, in the <em>opt</em> rules we don't have the "transitive subset" to intersect with</p>



<a name="206026409"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206026409" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206026409">(Aug 05 2020 at 14:11)</a>:</h4>
<p>right</p>



<a name="206026454"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206026454" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206026454">(Aug 05 2020 at 14:11)</a>:</h4>
<p>we surely could use the simpler way for the Naive rules since we do have the subset TC here</p>



<a name="206026572"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206026572" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206026572">(Aug 05 2020 at 14:12)</a>:</h4>
<p>I can do that</p>



<a name="206026662"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206026662" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206026662">(Aug 05 2020 at 14:13)</a>:</h4>
<p>it simplifies the variant at the slight expense of having another way to compute erroneous subsets but it's not a big deal and no one will know since we haven't yet documented the Opt rules :)</p>



<a name="206030653"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206030653" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206030653">(Aug 05 2020 at 14:45)</a>:</h4>
<p>sorry, got distracted by some other things --</p>



<a name="206030667"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206030667" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206030667">(Aug 05 2020 at 14:45)</a>:</h4>
<p>but it seems like keeping the naive rules naive is a good thing</p>



<a name="206030684"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206030684" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206030684">(Aug 05 2020 at 14:46)</a>:</h4>
<p>that said, i'm wondering about weaving in the <code>LocationInsensitive</code> stuff here</p>



<a name="206030740"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206030740" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206030740">(Aug 05 2020 at 14:46)</a>:</h4>
<p>where ?</p>



<a name="206030742"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206030742" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206030742">(Aug 05 2020 at 14:46)</a>:</h4>
<p>I think right now we are using that primarily to stop <em>loans</em> from propagating, is that right <span class="user-mention" data-user-id="116113">@lqd</span> ?</p>



<a name="206030757"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206030757" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206030757">(Aug 05 2020 at 14:46)</a>:</h4>
<p>oh, you had some more commits I think I maybe didn't read yet</p>



<a name="206030790"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206030790" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206030790">(Aug 05 2020 at 14:46)</a>:</h4>
<p>this branch has subset errors in the 3 variants yeah</p>



<a name="206030814"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206030814" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206030814">(Aug 05 2020 at 14:47)</a>:</h4>
<p>location-insensitive is the one we talked about a bit before, using placeholder loans</p>



<a name="206030869"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206030869" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206030869">(Aug 05 2020 at 14:47)</a>:</h4>
<p>so that we could resurrect the Hybrid variant (variant-alooza)</p>



<a name="206031002"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031002" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031002">(Aug 05 2020 at 14:48)</a>:</h4>
<p>to now finally be able to use the location-insensitive "potential errors" to filter origins and loans in the location sensitive analysis (Opt, in the most common case, but the same applies to the Naive variant if we wanted to)</p>



<a name="206031157"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031157" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031157">(Aug 05 2020 at 14:49)</a>:</h4>
<p>so we'd use that both to stop loans from propagating, but prior to that, also limit which origins they should transitively propagate to</p>



<a name="206031334"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031334" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031334">(Aug 05 2020 at 14:50)</a>:</h4>
<p>yeah but the main thing is</p>



<a name="206031351"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031351" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031351">(Aug 05 2020 at 14:50)</a>:</h4>
<p>that if we are computing placeholder errors from the (transitive) subset</p>



<a name="206031359"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031359" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031359">(Aug 05 2020 at 14:51)</a>:</h4>
<p>we still need to compute the transitive subset :P</p>



<a name="206031385"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031385" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031385">(Aug 05 2020 at 14:51)</a>:</h4>
<p>sorry, let me phrase that another way</p>



<a name="206031392"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031392" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031392">(Aug 05 2020 at 14:51)</a>:</h4>
<p>:)</p>



<a name="206031420"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031420" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031420">(Aug 05 2020 at 14:51)</a>:</h4>
<p>I don't thikn we have ever had a variant of the naive analysis that tries to avoid computing parts of the subset relation, is that true?</p>



<a name="206031431"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031431" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031431">(Aug 05 2020 at 14:51)</a>:</h4>
<p>yeah but Naive does that anyway</p>



<a name="206031447"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031447" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031447">(Aug 05 2020 at 14:51)</a>:</h4>
<p>that is my recollection as well</p>



<a name="206031478"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031478" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031478">(Aug 05 2020 at 14:51)</a>:</h4>
<p>apart from:</p>



<a name="206031486"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031486" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031486">(Aug 05 2020 at 14:52)</a>:</h4>
<p>yeah and for <em>opt</em> we're saying "we compute the full transitive subset, but only starting from those placeholders that may be involved in errors"</p>



<a name="206031528"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031528" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031528">(Aug 05 2020 at 14:52)</a>:</h4>
<p>(or you could imagine doing that, anyway)</p>



<a name="206031571"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031571" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031571">(Aug 05 2020 at 14:52)</a>:</h4>
<p>( we could also just keep the naive/opt setup analogous )</p>



<a name="206031586"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031586" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031586">(Aug 05 2020 at 14:52)</a>:</h4>
<ul>
<li>optimization cases where we use the results of the location-insensitive pass to filter the outlives and borrow regions used in the sensitive analyses</li>
</ul>



<a name="206031614"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031614" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031614">(Aug 05 2020 at 14:52)</a>:</h4>
<ul>
<li>actually there was just a single item in that list :)</li>
</ul>



<a name="206031658"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031658" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031658">(Aug 05 2020 at 14:53)</a>:</h4>
<p>for opt we're not really computing the full transitive subset</p>



<a name="206031704"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031704" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031704">(Aug 05 2020 at 14:53)</a>:</h4>
<p>for Naive we do, and the quote would be exactly that</p>



<a name="206031736"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031736" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031736">(Aug 05 2020 at 14:54)</a>:</h4>
<p>I guess I'm a bit lax</p>



<a name="206031806"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031806" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031806">(Aug 05 2020 at 14:54)</a>:</h4>
<p>and handwaving too much which subsets we compute starting from placeholders</p>



<a name="206031880"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031880" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031880">(Aug 05 2020 at 14:55)</a>:</h4>
<p>hopefully the essence of what I meant came through ...</p>



<a name="206031920"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031920" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031920">(Aug 05 2020 at 14:55)</a>:</h4>
<p>ok. so basically I'm just thinking about a few things</p>



<a name="206031991"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206031991" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206031991">(Aug 05 2020 at 14:56)</a>:</h4>
<ul>
<li>if we use placeholder <em>loans</em> (instead of subset) then it's kind of obvious how to incorporate the insensitive analysis</li>
</ul>



<a name="206032048"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032048" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032048">(Aug 05 2020 at 14:56)</a>:</h4>
<p>having subset_placeholder may allow us to filter differently when we want to compute loan errors and subset errors</p>



<a name="206032066"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032066" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032066">(Aug 05 2020 at 14:56)</a>:</h4>
<p>(i.e., we are already looking for loans that may be part of errors, and we restrict those from propagating)</p>



<a name="206032098"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032098" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032098">(Aug 05 2020 at 14:56)</a>:</h4>
<p>essentially I guess I'm trying to think which formulation feels simpler overall</p>



<a name="206032123"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032123" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032123">(Aug 05 2020 at 14:56)</a>:</h4>
<p>I think the appeal of the subset analysis for me was that, in the naive case at least, it was basically just adding one extra rule</p>



<a name="206032168"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032168" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032168">(Aug 05 2020 at 14:57)</a>:</h4>
<p>what is a bit confusing is that we can still use the potential loan errors (not potential subset errors) from LocIns to filter loans</p>



<a name="206032175"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032175" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032175">(Aug 05 2020 at 14:57)</a>:</h4>
<p>anyway I think all this code looks good and I am kind of happy with whichever approach ultimately</p>



<a name="206032208"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032208" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032208">(Aug 05 2020 at 14:57)</a>:</h4>
<p><span class="user-mention silent" data-user-id="116113">lqd</span> <a href="#narrow/stream/186049-t-compiler.2Fwg-polonius/topic/subset.20errors.20rework/near/206032168">said</a>:</p>
<blockquote>
<p>what is a bit confusing is that we can still use the potential loan errors (not potential subset errors) from LocIns to filter loans</p>
</blockquote>
<p>I mean we want to do this, right?</p>



<a name="206032212"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032212" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032212">(Aug 05 2020 at 14:57)</a>:</h4>
<p>sure</p>



<a name="206032227"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032227" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032227">(Aug 05 2020 at 14:57)</a>:</h4>
<p>we probably want to do this in the opt variant, too</p>



<a name="206032237"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032237" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032237">(Aug 05 2020 at 14:57)</a>:</h4>
<p>right right</p>



<a name="206032304"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032304" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032304">(Aug 05 2020 at 14:58)</a>:</h4>
<p>I guess overall the opt variant feels like it'd be a bit simpler using a placeholder <em>loans</em> approach</p>



<a name="206032337"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032337" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032337">(Aug 05 2020 at 14:58)</a>:</h4>
<p>yeah but it doesn't work as is there</p>



<a name="206032351"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032351" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032351">(Aug 05 2020 at 14:58)</a>:</h4>
<p>why not?</p>



<a name="206032354"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032354" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032354">(Aug 05 2020 at 14:58)</a>:</h4>
<p>there are too little subsets</p>



<a name="206032412"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032412" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032412">(Aug 05 2020 at 14:59)</a>:</h4>
<p>I'm imagining that it would work like this:</p>
<ul>
<li>we add a rule that says "at every node N, the placeholder origin O includes the placeholder loan L"</li>
</ul>



<a name="206032429"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032429" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032429">(Aug 05 2020 at 14:59)</a>:</h4>
<p>this can propagate like any other loan through the subset relations</p>



<a name="206032431"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032431" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032431">(Aug 05 2020 at 14:59)</a>:</h4>
<p>(just a sec let me look at the rules to make sure I'm not saying an incorrect thing on why it didn't work)</p>



<a name="206032465"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032465" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032465">(Aug 05 2020 at 14:59)</a>:</h4>
<p>and then we have a error rule to say</p>
<ul>
<li>"if there is a placehoder origin O1 that contains a loan L2 and it's not a known member"</li>
</ul>



<a name="206032533"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032533" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032533">(Aug 05 2020 at 15:00)</a>:</h4>
<p>(and we can filter that first rule down to loans that are potentially involved in errors)</p>



<a name="206032588"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032588" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032588">(Aug 05 2020 at 15:00)</a>:</h4>
<p>what I recall was: we didn't have enough <code>contains</code> (requires) data for the placeholder loans approach</p>



<a name="206032661"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032661" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032661">(Aug 05 2020 at 15:01)</a>:</h4>
<p>hmm</p>



<a name="206032669"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032669" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032669">(Aug 05 2020 at 15:01)</a>:</h4>
<p>I have to remember</p>



<a name="206032674"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032674" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032674">(Aug 05 2020 at 15:01)</a>:</h4>
<p>I'm not sure I debugged it to the point of knowing which data was missing and which rule filtered it</p>



<a name="206032681"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032681" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032681">(Aug 05 2020 at 15:01)</a>:</h4>
<p>do we not compute the transitive <code>contains</code> in the opt variant either?</p>



<a name="206032685"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032685" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032685">(Aug 05 2020 at 15:01)</a>:</h4>
<p>but it's easy enough to try</p>



<a name="206032688"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032688" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032688">(Aug 05 2020 at 15:01)</a>:</h4>
<p>I thought we did</p>



<a name="206032701"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032701" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032701">(Aug 05 2020 at 15:01)</a>:</h4>
<p>we do but it's heaviliy filtered down</p>



<a name="206032778"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032778" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032778">(Aug 05 2020 at 15:02)</a>:</h4>
<p>we have less subsets, so we have less requires, was my recollection</p>



<a name="206032823"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032823" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032823">(Aug 05 2020 at 15:02)</a>:</h4>
<p>the placeholder loans rules are super easy to copy paste if you want to try it in the opt variant</p>



<a name="206032864"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032864" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032864">(Aug 05 2020 at 15:03)</a>:</h4>
<p>I can whip something up if you want ?</p>



<a name="206032882"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206032882" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206032882">(Aug 05 2020 at 15:03)</a>:</h4>
<p>sure, I'm skimming the rules now</p>



<a name="206033095"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206033095" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206033095">(Aug 05 2020 at 15:04)</a>:</h4>
<p>you do want me to do it you mean ?</p>



<a name="206033361"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206033361" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206033361">(Aug 05 2020 at 15:06)</a>:</h4>
<p>(I remembered that since placeholders contained their loans at all points, loan propagation along the cfg created duplicates which needed to be deduped, for all rounds, at all cfg points, so it should be less efficient than the subset-based rules -- it's not important to this conversation, I just remembered this looking at it, but it's just our "X at all points are suboptimal")</p>



<a name="206033479"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206033479" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206033479">(Aug 05 2020 at 15:07)</a>:</h4>
<p>I'm making Opt use placeholder loans rn</p>



<a name="206034153"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206034153" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206034153">(Aug 05 2020 at 15:12)</a>:</h4>
<p>yeah, might as well try it</p>



<a name="206034652"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206034652" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206034652">(Aug 05 2020 at 15:15)</a>:</h4>
<p>ok wait <span class="user-mention" data-user-id="116113">@lqd</span></p>



<a name="206034665"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206034665" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206034665">(Aug 05 2020 at 15:15)</a>:</h4>
<p>so I think I see</p>



<a name="206034683"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206034683" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206034683">(Aug 05 2020 at 15:15)</a>:</h4>
<p>I guess the opt variant is smarter than I remembered :)</p>



<a name="206034685"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206034685" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206034685">(Aug 05 2020 at 15:15)</a>:</h4>
<p>it's a bit rushed but I have it</p>



<a name="206034693"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206034693" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206034693">(Aug 05 2020 at 15:15)</a>:</h4>
<p>haha</p>



<a name="206034706"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206034706" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206034706">(Aug 05 2020 at 15:15)</a>:</h4>
<p>in particular, it doesn't propagate loans indiscriminantly</p>



<a name="206034771"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206034771" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206034771">(Aug 05 2020 at 15:15)</a>:</h4>
<p>i.e., it waits until an origin goes to dead</p>



<a name="206034789"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206034789" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206034789">(Aug 05 2020 at 15:15)</a>:</h4>
<p>to propagate the loans from that origin to its successors</p>



<a name="206034862"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206034862" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206034862">(Aug 05 2020 at 15:16)</a>:</h4>
<p>right !</p>



<a name="206034869"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206034869" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206034869">(Aug 05 2020 at 15:16)</a>:</h4>
<p>so I can imagine that just adding the naive rules</p>



<a name="206034877"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206034877" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206034877">(Aug 05 2020 at 15:16)</a>:</h4>
<p>is not going to work :)</p>



<a name="206034902"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206034902" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206034902">(Aug 05 2020 at 15:16)</a>:</h4>
<p>that's what I was handwaving all along (jk)</p>



<a name="206034904"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206034904" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206034904">(Aug 05 2020 at 15:16)</a>:</h4>
<p>this works out ok for the borrow rules beacuse</p>



<a name="206034924"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206034924" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206034924">(Aug 05 2020 at 15:16)</a>:</h4>
<p>we don't care <em>which</em> origin contains a loan</p>



<a name="206034931"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206034931" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206034931">(Aug 05 2020 at 15:16)</a>:</h4>
<p>if you want to try for some reason, here's a diff <a href="https://gist.github.com/lqd/1358b95bccb5e4c3672a61517bda471b">https://gist.github.com/lqd/1358b95bccb5e4c3672a61517bda471b</a></p>



<a name="206034944"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206034944" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206034944">(Aug 05 2020 at 15:16)</a>:</h4>
<p>we only care that <em>some</em> live origin contains the loan</p>



<a name="206034963"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206034963" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206034963">(Aug 05 2020 at 15:16)</a>:</h4>
<p>but for the <em>subset errors</em>, that's not true</p>



<a name="206035020"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035020" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035020">(Aug 05 2020 at 15:17)</a>:</h4>
<p>so... ok... now I'm convinced that placeholder loans the wrong approach</p>



<a name="206035030"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035030" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035030">(Aug 05 2020 at 15:17)</a>:</h4>
<p>:)</p>



<a name="206035047"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035047" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035047">(Aug 05 2020 at 15:17)</a>:</h4>
<p>basically, the way that we use them is distinct</p>



<a name="206035064"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035064" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035064">(Aug 05 2020 at 15:17)</a>:</h4>
<p>so it doesn't really help us to leverage the loan mechanism in the opt variant</p>



<a name="206035077"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035077" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035077">(Aug 05 2020 at 15:17)</a>:</h4>
<p>and the <em>naive</em> variant is even simpler with the subset approach</p>



<a name="206035089"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035089" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035089">(Aug 05 2020 at 15:17)</a>:</h4>
<p>but it looks good for the location-insensitive one</p>



<a name="206035177"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035177" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035177">(Aug 05 2020 at 15:18)</a>:</h4>
<p>sure, but location insensitive can also be extended to use the origin-relations approach very easily, right?</p>



<a name="206035192"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035192" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035192">(Aug 05 2020 at 15:18)</a>:</h4>
<p>sure</p>



<a name="206035197"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035197" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035197">(Aug 05 2020 at 15:18)</a>:</h4>
<p>i.e., it computes the transitive subset relation but it just does it without considering the nodes</p>



<a name="206035226"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035226" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035226">(Aug 05 2020 at 15:18)</a>:</h4>
<p>it's easy to do so but we might not want to maintain the subsets if we don't really need to</p>



<a name="206035254"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035254" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035254">(Aug 05 2020 at 15:18)</a>:</h4>
<p>for the purity of rules this argument wouldn't matter of course</p>



<a name="206035264"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035264" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035264">(Aug 05 2020 at 15:19)</a>:</h4>
<p>does it currently not compute the transitive subset relation at all?</p>



<a name="206035281"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035281" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035281">(Aug 05 2020 at 15:19)</a>:</h4>
<p>location-insensitive, I mean</p>



<a name="206035290"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035290" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035290">(Aug 05 2020 at 15:19)</a>:</h4>
<p>it just propagates loans?</p>



<a name="206035304"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035304" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035304">(Aug 05 2020 at 15:19)</a>:</h4>
<p>I guess that makes sense</p>



<a name="206035321"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035321" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035321">(Aug 05 2020 at 15:19)</a>:</h4>
<p>no</p>



<a name="206035342"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035342" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035342">(Aug 05 2020 at 15:19)</a>:</h4>
<p>yup just loans</p>



<a name="206035382"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035382" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035382">(Aug 05 2020 at 15:19)</a>:</h4>
<p>ok, so, what you're saying is:</p>



<a name="206035404"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035404" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035404">(Aug 05 2020 at 15:20)</a>:</h4>
<p>we can keep the concept of placeholder origin with a paired placeholder loan</p>



<a name="206035460"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035460" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035460">(Aug 05 2020 at 15:20)</a>:</h4>
<p>but only the location insensitive analysis uses the loan for anything</p>



<a name="206035491"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035491" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035491">(Aug 05 2020 at 15:20)</a>:</h4>
<p>(which is why it was really fast and easy to make the location insensitive analyses as reachability queries on the condensation graph)</p>



<a name="206035495"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035495" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035495">(Aug 05 2020 at 15:20)</a>:</h4>
<p>we could of course also have the insensitive analysis</p>



<a name="206035534"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035534" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035534">(Aug 05 2020 at 15:20)</a>:</h4>
<p>for example yeah, but that's really not a big deal either way</p>



<a name="206035538"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035538" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035538">(Aug 05 2020 at 15:20)</a>:</h4>
<p>propagate a distinct relation that is just for "outlived placeholder origins"</p>



<a name="206035603"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035603" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035603">(Aug 05 2020 at 15:21)</a>:</h4>
<p>i.e., we'd have the "transitive loans contained in origin X" and the "transitive placeholder origins contained in origin X"</p>



<a name="206035616"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035616" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035616">(Aug 05 2020 at 15:21)</a>:</h4>
<p>instead of just one set of tuples</p>



<a name="206035622"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035622" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035622">(Aug 05 2020 at 15:21)</a>:</h4>
<p>that combines them both</p>



<a name="206035628"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035628" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035628">(Aug 05 2020 at 15:21)</a>:</h4>
<p>both methods work here, I'm not sure if there's that much of an eficiency difference tbh</p>



<a name="206035652"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035652" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035652">(Aug 05 2020 at 15:21)</a>:</h4>
<p>right, I imagine it's kind of "six in one, half a dozen in the other"</p>



<a name="206035657"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035657" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035657">(Aug 05 2020 at 15:21)</a>:</h4>
<p>sure</p>



<a name="206035672"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035672" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035672">(Aug 05 2020 at 15:21)</a>:</h4>
<p>:)</p>



<a name="206035675"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035675" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035675">(Aug 05 2020 at 15:21)</a>:</h4>
<p>the only advantage I see is not having "placeholder loans" as a thing at all</p>



<a name="206035696"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035696" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035696">(Aug 05 2020 at 15:21)</a>:</h4>
<p>at the cost of some duplication in the "location insensitive" rules</p>



<a name="206035713"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035713" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035713">(Aug 05 2020 at 15:21)</a>:</h4>
<p>and the known contains relation that goes with them</p>



<a name="206035774"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035774" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035774">(Aug 05 2020 at 15:22)</a>:</h4>
<p>well we still need a <code>known_subset</code> relation</p>



<a name="206035786"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035786" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035786">(Aug 05 2020 at 15:22)</a>:</h4>
<p>sure</p>



<a name="206035798"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035798" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035798">(Aug 05 2020 at 15:22)</a>:</h4>
<p>but yeah</p>



<a name="206035807"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035807" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035807">(Aug 05 2020 at 15:22)</a>:</h4>
<p>as of now we have both</p>



<a name="206035822"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035822" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035822">(Aug 05 2020 at 15:22)</a>:</h4>
<p>seems a bit better to me to just have "placeholder origins"</p>



<a name="206035831"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035831" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035831">(Aug 05 2020 at 15:22)</a>:</h4>
<p>yesterday we only had <code>known_contains</code></p>



<a name="206035859"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035859" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035859">(Aug 05 2020 at 15:22)</a>:</h4>
<p>the location insensitive rules we'd be duplicating are very simple</p>



<a name="206035874"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035874" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035874">(Aug 05 2020 at 15:22)</a>:</h4>
<p>very</p>



<a name="206035892"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035892" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035892">(Aug 05 2020 at 15:22)</a>:</h4>
<p>and then the output is kind of the "loans involved in errors" and "placeholder origins involved in errors"</p>



<a name="206035922"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035922" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035922">(Aug 05 2020 at 15:23)</a>:</h4>
<p>and we can filter things in a straightforward way using those</p>



<a name="206035962"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035962" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035962">(Aug 05 2020 at 15:23)</a>:</h4>
<p>I honestly don't mind either way until we have proof that one is obviously better than the other</p>



<a name="206035973"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035973" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035973">(Aug 05 2020 at 15:23)</a>:</h4>
<p>exactly</p>



<a name="206035997"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206035997" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206035997">(Aug 05 2020 at 15:23)</a>:</h4>
<p>I'm convinced :)</p>



<a name="206036013"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206036013" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206036013">(Aug 05 2020 at 15:23)</a>:</h4>
<p>it's not a major difference, I agree</p>



<a name="206036112"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206036112" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206036112">(Aug 05 2020 at 15:24)</a>:</h4>
<p>it's not super easy to know how to filter the different relations depending on whether a potential error, or potential subset error, or both, involve a given loan / origin</p>



<a name="206036246"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206036246" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206036246">(Aug 05 2020 at 15:25)</a>:</h4>
<p>on a slightly unrelated topic, because I'm finding "error" to lack precision, how would you call the loan analysis errors, compared to subset errors. "illegal access errors" ?</p>



<a name="206036759"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206036759" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206036759">(Aug 05 2020 at 15:29)</a>:</h4>
<p><span class="user-mention silent" data-user-id="116113">lqd</span> <a href="#narrow/stream/186049-t-compiler.2Fwg-polonius/topic/subset.20errors.20rework/near/206036112">said</a>:</p>
<blockquote>
<p>it's not super easy to know how to filter the different relations depending on whether a potential error, or potential subset error, or both, involve a given loan / origin</p>
</blockquote>
<p>say more?</p>



<a name="206036854"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206036854" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206036854">(Aug 05 2020 at 15:29)</a>:</h4>
<p>for example, if LocIns finds a single potential illegal access error we can eliminate all other borrow regions</p>



<a name="206036957"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206036957" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206036957">(Aug 05 2020 at 15:30)</a>:</h4>
<p>we can also look at all origins which the introducing origin flows into</p>



<a name="206036962"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206036962" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206036962">(Aug 05 2020 at 15:30)</a>:</h4>
<p>and remove the others</p>



<a name="206037034"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206037034" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206037034">(Aug 05 2020 at 15:31)</a>:</h4>
<p>if now there's also a potential subset error, things are more complicated</p>



<a name="206037126"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206037126" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206037126">(Aug 05 2020 at 15:31)</a>:</h4>
<p>we need to make sure that filtering the outlives constraints doesn't remove the path between the placeholders</p>



<a name="206037386"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206037386" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206037386">(Aug 05 2020 at 15:33)</a>:</h4>
<p>maybe, just maybe, having the two different transitive subsets could help here, but I haven't looked into it</p>



<a name="206037629"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206037629" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206037629">(Aug 05 2020 at 15:35)</a>:</h4>
<p>so I mostly meant that we had to be careful when making use of the results of the LocIns variant in the Naive or Opt variants (as part of the Hybrid context) to optimize possibly differently with these 2 kinds of potential errors</p>



<a name="206037758"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206037758" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206037758">(Aug 05 2020 at 15:36)</a>:</h4>
<p>I see</p>



<a name="206037779"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206037779" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206037779">(Aug 05 2020 at 15:36)</a>:</h4>
<p><span class="user-mention silent" data-user-id="116113">lqd</span> <a href="#narrow/stream/186049-t-compiler.2Fwg-polonius/topic/subset.20errors.20rework/near/206036957">said</a>:</p>
<blockquote>
<p>we can also look at all origins which the introducing origin flows into</p>
</blockquote>
<p>this is the part that interacts, right?</p>



<a name="206037839"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206037839" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206037839">(Aug 05 2020 at 15:36)</a>:</h4>
<p>we can certainly compute two "parallel" subset relationships</p>



<a name="206037880"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206037880" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206037880">(Aug 05 2020 at 15:37)</a>:</h4>
<p>yeah that's a key part, I'm not sure if it's the only part tho</p>



<a name="206037896"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206037896" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206037896">(Aug 05 2020 at 15:37)</a>:</h4>
<p>absolutely</p>



<a name="206037916"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206037916" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206037916">(Aug 05 2020 at 15:37)</a>:</h4>
<p>I was initially imagining that we would just filter the loans that get "introduced" into the <code>contains</code> (<code>requires</code>?) relationship</p>



<a name="206037922"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206037922" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206037922">(Aug 05 2020 at 15:37)</a>:</h4>
<p>that's easy</p>



<a name="206037953"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206037953" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206037953">(Aug 05 2020 at 15:37)</a>:</h4>
<p>the relations should be heavility filtered anyway so having both relationships if need be wouldn't matter much</p>



<a name="206037958"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206037958" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206037958">(Aug 05 2020 at 15:37)</a>:</h4>
<p>I guess I'm imagining that we can have a relation like <code>contains</code>, but call it <code>contains_placeholder(origin1, origin2, node)</code></p>



<a name="206038013"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038013" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038013">(Aug 05 2020 at 15:38)</a>:</h4>
<p>this is probably <code>subset_placeholder</code> <em>but</em> I think using a distinct name is maybe less confusing? unclera :)</p>



<a name="206038026"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038026" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038026">(Aug 05 2020 at 15:38)</a>:</h4>
<p>perhaps more confusing actually, I take it back</p>



<a name="206038034"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038034" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038034">(Aug 05 2020 at 15:38)</a>:</h4>
<p>anyway the point is that it would be built using <code>subset_base</code> only</p>



<a name="206038035"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038035" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038035">(Aug 05 2020 at 15:38)</a>:</h4>
<p>for potential loan errors we can indeed filter <code>requires</code> that's immediate</p>



<a name="206038059"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038059" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038059">(Aug 05 2020 at 15:38)</a>:</h4>
<p>but we don't have to do the TC on "useless origins"</p>



<a name="206038061"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038061" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038061">(Aug 05 2020 at 15:38)</a>:</h4>
<p>(does that work...that might require a lot of duplication I guess for the logic that moves it between nodes)</p>



<a name="206038092"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038092" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038092">(Aug 05 2020 at 15:39)</a>:</h4>
<p>and can filter <code>subsets</code> as well via filtering <code>outlives</code></p>



<a name="206038174"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038174" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038174">(Aug 05 2020 at 15:39)</a>:</h4>
<p>yeah so at least in the <em>opt</em> variant, I was imagining that we would (a) control which loans we introduce and (b) only compute the <code>subset_placeholder</code> if the placeholder origin is known to be part of a potential error</p>



<a name="206038244"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038244" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038244">(Aug 05 2020 at 15:40)</a>:</h4>
<p>agreed</p>



<a name="206038255"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038255" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038255">(Aug 05 2020 at 15:40)</a>:</h4>
<p>but if we are going to restrict the <code>subset</code> relation itself</p>



<a name="206038256"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038256" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038256">(Aug 05 2020 at 15:40)</a>:</h4>
<p>it seems elegant and straightforward</p>



<a name="206038273"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038273" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038273">(Aug 05 2020 at 15:40)</a>:</h4>
<p>I guess I'm not sure that's worth the effort :)</p>



<a name="206038285"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038285" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038285">(Aug 05 2020 at 15:40)</a>:</h4>
<p>in the naive variant, presumably, it could be</p>



<a name="206038291"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038291" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038291">(Aug 05 2020 at 15:40)</a>:</h4>
<p>we don't have to for opt yeah</p>



<a name="206038305"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038305" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038305">(Aug 05 2020 at 15:40)</a>:</h4>
<p>for naive it's trivial, easy and effective</p>



<a name="206038325"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038325" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038325">(Aug 05 2020 at 15:41)</a>:</h4>
<p>well, it's easy, but then it potentially eliminates errors,</p>



<a name="206038328"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038328" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038328">(Aug 05 2020 at 15:41)</a>:</h4>
<p>(at least on clap :)</p>



<a name="206038344"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038344" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038344">(Aug 05 2020 at 15:41)</a>:</h4>
<p>butI guess the answer is that we can include all origins that may be involved in subset errors too?</p>



<a name="206038362"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038362" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038362">(Aug 05 2020 at 15:41)</a>:</h4>
<p>(can we compute that readily enough?)</p>



<a name="206038367"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038367" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038367">(Aug 05 2020 at 15:41)</a>:</h4>
<p>yup</p>



<a name="206038384"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038384" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038384">(Aug 05 2020 at 15:41)</a>:</h4>
<p>I did that once</p>



<a name="206038485"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038485" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038485">(Aug 05 2020 at 15:42)</a>:</h4>
<p>and turns out it prevents most filtering unfortunately on clap ;)</p>



<a name="206038490"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038490" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038490">(Aug 05 2020 at 15:42)</a>:</h4>
<p>oh well</p>



<a name="206038493"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038493" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038493">(Aug 05 2020 at 15:42)</a>:</h4>
<p>so basically we have:</p>
<ul>
<li>each loan L that may be live at the point of a contradicting access</li>
<li>each placeholder origin O1 that may be a subset of some other placeholder origin O2, where <code>O1: O2</code> that is outside the "known subsets" </li>
<li>all origins that contain those loans or placeholders</li>
</ul>



<a name="206038511"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038511" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038511">(Aug 05 2020 at 15:42)</a>:</h4>
<p><span class="user-mention silent" data-user-id="116113">lqd</span> <a href="#narrow/stream/186049-t-compiler.2Fwg-polonius/topic/subset.20errors.20rework/near/206038485">said</a>:</p>
<blockquote>
<p>and turns out it prevents most filtering unfortunately on clap ;)</p>
</blockquote>
<p>wait, what?</p>



<a name="206038538"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038538" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038538">(Aug 05 2020 at 15:42)</a>:</h4>
<p>it's just the shape of the clap dataset I think</p>



<a name="206038573"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038573" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038573">(Aug 05 2020 at 15:43)</a>:</h4>
<p>that confuses me</p>



<a name="206038583"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038583" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038583">(Aug 05 2020 at 15:43)</a>:</h4>
<p>sorry:</p>



<a name="206038604"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038604" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038604">(Aug 05 2020 at 15:43)</a>:</h4>
<p>are you saying that, in clap at least, there are a lot of potential errors?</p>



<a name="206038606"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038606" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038606">(Aug 05 2020 at 15:43)</a>:</h4>
<p>though to be fair I hadn't limited it only to placeholder <em>only</em> involved in potential subset errors</p>



<a name="206038619"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038619" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038619">(Aug 05 2020 at 15:43)</a>:</h4>
<p>and so the filtering isn't that effective</p>



<a name="206038633"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038633" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038633">(Aug 05 2020 at 15:43)</a>:</h4>
<p>ah</p>



<a name="206038639"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038639" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038639">(Aug 05 2020 at 15:43)</a>:</h4>
<p>sorry I'm confusing you</p>



<a name="206038648"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038648" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038648">(Aug 05 2020 at 15:44)</a>:</h4>
<p>you were saying you limited it to "anything derived from a <em>placeholder</em>"</p>



<a name="206038687"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038687" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038687">(Aug 05 2020 at 15:44)</a>:</h4>
<p>there are no potential subset errors in clap</p>



<a name="206038691"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038691" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038691">(Aug 05 2020 at 15:44)</a>:</h4>
<p>yes</p>



<a name="206038699"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038699" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038699">(Aug 05 2020 at 15:44)</a>:</h4>
<p>ok ok</p>



<a name="206038706"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038706" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038706">(Aug 05 2020 at 15:44)</a>:</h4>
<p>I can understand that</p>



<a name="206038716"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038716" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038716">(Aug 05 2020 at 15:44)</a>:</h4>
<p>sorry I had forgotten that key point</p>



<a name="206038756"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038756" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038756">(Aug 05 2020 at 15:44)</a>:</h4>
<p>that does seem imp't</p>



<a name="206038770"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038770" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038770">(Aug 05 2020 at 15:44)</a>:</h4>
<p>turns out something in clap flows into a placeholder and limits filtering</p>



<a name="206038802"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038802" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038802">(Aug 05 2020 at 15:44)</a>:</h4>
<p>it has a weird shape actually, like 2 huge SCCs or something</p>



<a name="206038809"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038809" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038809">(Aug 05 2020 at 15:44)</a>:</h4>
<p>I see, yes, that sounds quite plausible</p>



<a name="206038831"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038831" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038831">(Aug 05 2020 at 15:45)</a>:</h4>
<p>but I think we can limit to cases that may involve <em>errors</em></p>



<a name="206038842"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038842" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038842">(Aug 05 2020 at 15:45)</a>:</h4>
<p>and that is probably a big difference</p>



<a name="206038846"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038846" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038846">(Aug 05 2020 at 15:45)</a>:</h4>
<p>right</p>



<a name="206038884"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038884" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038884">(Aug 05 2020 at 15:45)</a>:</h4>
<p>it absolutely was on illegal access errors so I presume it will on subset errors as well</p>



<a name="206038934"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038934" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038934">(Aug 05 2020 at 15:45)</a>:</h4>
<p>especially since subset errors are, I believe, heavier to compute than the others</p>



<a name="206038997"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206038997" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206038997">(Aug 05 2020 at 15:46)</a>:</h4>
<p>but maybe clap skewed my view</p>



<a name="206039075"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206039075" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206039075">(Aug 05 2020 at 15:46)</a>:</h4>
<p>illegal access errors traversals are numerous but shallow in the subset graph, subset errors traversals are few but traverse deeper</p>



<a name="206039830"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206039830" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206039830">(Aug 05 2020 at 15:53)</a>:</h4>
<p>(or subset multigraph since we don't really link 'static to regular origins -- or hypergraph with <code>outlives</code> as hyperedges between the cfg points, I'm still unsure how to describe it)</p>



<a name="206039956"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206039956" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206039956">(Aug 05 2020 at 15:54)</a>:</h4>
<p>(that also makes it hard to find papers in the literature to solve our problems for us)</p>



<a name="206040594"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206040594" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206040594">(Aug 05 2020 at 15:59)</a>:</h4>
<p>transitive closures of dynamic graphs don't really work as is, worst case optimal joins on k^n trees either (though they have a nice data structure I wish I could use because of the naming resemblance: <code>lqdags</code> :)</p>



<a name="206042946"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206042946" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206042946">(Aug 05 2020 at 16:15)</a>:</h4>
<p>heh</p>



<a name="206042971"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206042971" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206042971">(Aug 05 2020 at 16:16)</a>:</h4>
<p>ok, well, we should try to document some of the plans from this thread into the hackmd</p>



<a name="206043017"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206043017" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206043017">(Aug 05 2020 at 16:16)</a>:</h4>
<p>I have to run and grab some lunch but will do</p>



<a name="206043586"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206043586" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206043586">(Aug 05 2020 at 16:20)</a>:</h4>
<p>great, thank you</p>



<a name="206043640"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206043640" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206043640">(Aug 05 2020 at 16:20)</a>:</h4>
<p>I’ll turn the naive rules more naive soon-ish</p>



<a name="206043736"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206043736" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206043736">(Aug 05 2020 at 16:21)</a>:</h4>
<p>and document them in the hackmd, before opening the PR, maybe add them to the book as well now that is think about it</p>



<a name="206043746"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206043746" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206043746">(Aug 05 2020 at 16:21)</a>:</h4>
<p>enjoy your meal, bon appétit</p>



<a name="206065322"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206065322" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206065322">(Aug 05 2020 at 19:09)</a>:</h4>
<p><span class="user-mention" data-user-id="116113">@lqd</span> took me a while but I'm adding stuff to <a href="https://github.com/rust-lang/polonius/issues/153">https://github.com/rust-lang/polonius/issues/153</a></p>



<a name="206065324"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206065324" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206065324">(Aug 05 2020 at 19:09)</a>:</h4>
<p>I may get some of the details wrong, please double check =)</p>



<a name="206068955"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206068955" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206068955">(Aug 05 2020 at 19:43)</a>:</h4>
<p>Will do :) thanks for doing that</p>



<a name="206089622"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/186049-t-compiler/wg-polonius/topic/subset%20errors%20rework/near/206089622" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> lqd <a href="https://rust-lang.github.io/zulip_archive/stream/186049-t-compiler/wg-polonius/topic/subset.20errors.20rework.html#206089622">(Aug 05 2020 at 23:21)</a>:</h4>
<p>that's a great summary</p>



<hr><p>Last updated: Aug 07 2021 at 22:04 UTC</p>
</html>